home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-1.iso / program / swmp141.zip / PAS_SDK.ZIP / MODPLAY.PAS < prev    next >
Pascal/Delphi Source File  |  1995-12-12  |  4KB  |  211 lines

  1. {* ╓──────────────────────────────────────────────────╖ *}
  2. {* ║ SOUND WIZARDS MODULE PLAYER V1.41 BY LORD EXCESS ║ *}
  3. {* ╙──────────────────────────────────────────────────╜ *}
  4.  
  5. UNIT MODPLAY;
  6.  
  7. INTERFACE
  8.  
  9. CONST Detection         = 0;
  10.       SoundBlaster      = 1;
  11.       SoundBlaster_Pro  = 2;
  12.       Gravis_UltraSound = 3;
  13.  
  14. VAR   Soundcard: WORD;
  15.       Channels:  WORD;
  16.       Peak:      ARRAY [1..8] OF BYTE;
  17.  
  18. PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE);
  19. PROCEDURE Mod_Load(File_Name: STRING);
  20. PROCEDURE Mod_Play(Looping: WORD);
  21. PROCEDURE Mod_Stop;
  22. PROCEDURE Mod_Volume(Volume: BYTE);
  23. FUNCTION  Mod_Status: WORD;
  24. FUNCTION  Mod_Position: WORD;
  25. PROCEDURE Mod_Rewind;
  26. PROCEDURE Mod_Forward;
  27. PROCEDURE Mod_Peak;
  28.  
  29.  
  30. IMPLEMENTATION
  31.  
  32. USES DETECT,SB_DRV,SBP_DRV,GUS_DRV;
  33.  
  34. VAR Mod_Driver,Old_Exit: POINTER;
  35.     Mod_File:            STRING[128];
  36.  
  37. PROCEDURE Mod_Close; FAR; ASSEMBLER;    {* do not call this procedure! *}
  38. ASM
  39.   mov     ax,WORD PTR [Old_Exit]
  40.   mov     dx,WORD PTR [Old_Exit+2]
  41.   mov     WORD PTR [ExitProc],ax
  42.   mov     WORD PTR [ExitProc+2],dx
  43.   mov     bx,1
  44.   call    DWORD PTR [Mod_Driver]
  45. END;
  46.  
  47. PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE); ASSEMBLER;
  48. ASM
  49.   mov     ax,[Driver]
  50.   or      ax,ax
  51.   jz      @@1
  52.   cmp     ax,Gravis_UltraSound
  53.   ja      @@Error
  54.   mov     cl,BYTE PTR [IRQ]
  55.   mov     ch,BYTE PTR [DMA]
  56.   mov     dx,[Port]
  57.   jmp     @@2
  58. @@1:
  59.   call    FAR PTR Detect_Hardware
  60.   or      ax,ax
  61.   jz      @@Error
  62.   cmp     ax,Gravis_UltraSound
  63.   ja      @@Error
  64. @@2:
  65.   mov     [Soundcard],ax
  66.   mov     WORD PTR [Mod_Driver],0
  67.   cmp     ax,SoundBlaster
  68.   jnz     @@3
  69.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SB
  70.   jmp     @@Test
  71. @@3:
  72.   cmp     ax,SoundBlaster_Pro
  73.   jnz     @@4
  74.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SBP
  75.   jmp     @@Test
  76. @@4:
  77.   mov     WORD PTR [Mod_Driver+2],SEG Driver_GUS
  78. @@Test:
  79.   xor     bx,bx
  80.   call    DWORD PTR [Mod_Driver]
  81.   or      ax,ax
  82.   jz      @@Error
  83.   mov     ax,WORD PTR [ExitProc]
  84.   mov     dx,WORD PTR [ExitProc+2]
  85.   mov     WORD PTR [Old_Exit],ax
  86.   mov     WORD PTR [Old_Exit+2],dx
  87.   mov     WORD PTR [ExitProc],OFFSET Mod_Close
  88.   mov     WORD PTR [ExitProc+2],SEG Mod_Close
  89.   jmp     @@Out
  90. @@Error:
  91.   mov     [Soundcard],0
  92. @@Out:
  93. END;
  94.  
  95. PROCEDURE Mod_Load(File_Name: STRING); ASSEMBLER;
  96. ASM
  97.   mov     ax,[Soundcard]
  98.   or      ax,ax
  99.   jz      @@Out
  100.   cld
  101.   mov     ax,ds
  102.   mov     es,ax
  103.   lds     si,DWORD PTR [File_Name]
  104.   lodsb
  105.   mov     cl,al
  106.   and     cx,7Fh
  107.   mov     dx,OFFSET Mod_File
  108.   mov     di,dx
  109.   rep     movsb
  110.   xor     al,al
  111.   stosb
  112.   mov     ax,es
  113.   mov     ds,ax
  114.   mov     bx,2
  115.   call    DWORD PTR [Mod_Driver]
  116. @@Out:
  117.   mov     [Channels],ax
  118. END;
  119.  
  120. PROCEDURE Mod_Play(Looping: WORD); ASSEMBLER;
  121. ASM
  122.   cmp     [Soundcard],0
  123.   jz      @@Out
  124.   mov     bx,3
  125.   mov     ax,[Looping]
  126.   call    DWORD PTR [Mod_Driver]
  127. @@Out:
  128. END;
  129.  
  130. PROCEDURE Mod_Stop; ASSEMBLER;
  131. ASM
  132.   cmp     [Soundcard],0
  133.   jz      @@Out
  134.   mov     bx,4
  135.   call    DWORD PTR [Mod_Driver]
  136. @@Out:
  137. END;
  138.  
  139. PROCEDURE Mod_Volume(Volume: BYTE); ASSEMBLER;
  140. ASM
  141.   cmp     [Soundcard],0
  142.   jz      @@Out
  143.   mov     bx,5
  144.   mov     al,[Volume]
  145.   call    DWORD PTR [Mod_Driver]
  146. @@Out:
  147. END;
  148.  
  149. FUNCTION  Mod_Status: WORD; ASSEMBLER;
  150. ASM
  151.   mov     ax,[Soundcard]
  152.   or      ax,ax
  153.   jz      @@Out
  154.   mov     bx,6
  155.   call    DWORD PTR [Mod_Driver]
  156. @@Out:
  157. END;
  158.  
  159. FUNCTION  Mod_Position: WORD; ASSEMBLER;
  160. ASM
  161.   mov     ax,[Soundcard]
  162.   or      ax,ax
  163.   jz      @@Out
  164.   mov     bx,7
  165.   xor     al,al
  166.   call    DWORD PTR [Mod_Driver]
  167. @@Out:
  168. END;
  169.  
  170. PROCEDURE Mod_Rewind; ASSEMBLER;
  171. ASM
  172.   cmp     [Soundcard],0
  173.   jz      @@Out
  174.   mov     bx,7
  175.   mov     al,-1
  176.   call    DWORD PTR [Mod_Driver]
  177. @@Out:
  178. END;
  179.  
  180. PROCEDURE Mod_Forward; ASSEMBLER;
  181. ASM
  182.   cmp     [Soundcard],0
  183.   jz      @@Out
  184.   mov     bx,7
  185.   mov     al,1
  186.   call    DWORD PTR [Mod_Driver]
  187. @@Out:
  188. END;
  189.  
  190. PROCEDURE Mod_Peak; ASSEMBLER;
  191. ASM
  192.   push    es
  193.   mov     ax,ds
  194.   mov     es,ax
  195.   mov     di,OFFSET Peak
  196.   cmp     [Soundcard],0
  197.   jnz     @@Ok
  198.   cld
  199.   mov     cx,4
  200.   xor     ax,ax
  201.   rep     stosw
  202.   jmp     @@Out
  203. @@Ok:
  204.   mov     bx,8
  205.   call    DWORD PTR [Mod_Driver]
  206. @@Out:
  207.   pop     es
  208. END;
  209.  
  210. END.
  211.